.TH SG_SENDDIAG "8" "May 2018" "sg3_utils\-1.43" SG3_UTILS
.SH NAME
sg_senddiag \- performs a SCSI SEND DIAGNOSTIC command
.SH SYNOPSIS
.B sg_senddiag
[\fI\-\-doff\fR] [\fI\-\-extdur\fR] [\fI\-\-help\fR] [\fI\-\-hex\fR]
[\fI\-\-list\fR] [\fI\-\-maxlen=LEN\fR] [\fI\-\-page=PG\fR] [\fI\-\-pf\fR]
[\fI\-\-raw=H,H...\fR] [\fI\-\-raw=\-\fR] [\fI\-\-selftest=ST\fR]
[\fI\-\-test\fR] [\fI\-\-timeout=SECS\fR] [\fI\-\-uoff\fR] [\fI\-\-verbose\fR]
[\fI\-\-version\fR] \fIDEVICE\fR
.PP
.B sg_senddiag
[\fI\-doff\fR] [\fI\-e\fR] [\fI\-h\fR] [\fI\-H\fR] [\fI\-l\fR] [\fI\-pf\fR]
[\fI\-raw=H,H...\fR] [\fI\-raw=\-\fR] [\fI\-s=ST\fR] [\fI\-t\fR]
[\fI\-T=SECS\fR] [\fI\-uoff\fR] [\fI\-v\fR] [\fI\-V\fR] [\fI\-?\fR]
\fIDEVICE\fR
.SH DESCRIPTION
.\" Add any additional description here
This utility sends a SCSI SEND DIAGNOSTIC command to the \fIDEVICE\fR. It
can issue self\-tests, find supported diagnostic pages or send arbitrary
diagnostic pages.
.PP
When the \fI\-\-list\fR option and a \fIDEVICE\fR are given then the utility
sends a SCSI RECEIVE DIAGNOSTIC RESULTS command to fetch the response (i.e.
the page numbers of supported diagnostic pages).
.PP
When the \fI\-\-list\fR option is given without a \fIDEVICE\fR then a list of
diagnostic page names and their numbers, known by this utility, are listed.
.PP
This utility supports two command line syntax\-es, the preferred one is
shown first in the synopsis and explained in this section. A later section
on the old command line syntax outlines the second group of options.
.SH OPTIONS
Arguments to long options are mandatory for short options as well.
.TP
\fB\-d\fR, \fB\-\-doff\fR
set the Device Offline (DevOffL) bit (default is clear). Only significant
when \fI\-\-test\fR option is set for the default self\-test. When set other
operations on any logical units controlled by the this device server (target)
may be affected (delayed) while a default self\-test is underway.
.TP
\fB\-e\fR, \fB\-\-extdur\fR
outputs the expected extended self\-test duration. The duration is given in
seconds (and minutes in parentheses). This figure is obtained from mode page
0xa (i.e. the control mode page).
.TP
\fB\-h\fR, \fB\-\-help\fR
print usage message then exit.
.TP
\fB\-H\fR, \fB\-\-hex\fR
outputs response from RECEIVE DIAGNOSTIC RESULTS in hex rather than decode it.
Only the Supported Diagnostic Pages diagnostic page (i.e. page_code=0) is
decoded; other pages (e.g. those used by SES) are output in hex.
.br
If \fI\-\-hex\fR is used once, the hex output has a relative address at the
start of each line. If \fI\-\-hex\fR is used twice, then ASCII is shown to
the right of each line of hex. If \fI\-\-hex\fR is used three time or more,
only the hex is output, in two character pairs (i.e. a byte) space separated
and up to 16 bytes per line. This latter form, if placed in a file or piped
through to another invocation, is suitable for the \fI\-\-raw=\-\fR option.
.TP
\fB\-l\fR, \fB\-\-list\fR
when a \fIDEVICE\fR is also given lists the names of all diagnostic pages
supported by this device. The request is sent via a SEND DIAGNOSTIC
command (with the "pF" bit set) and the response is fetched by a RECEIVE
DIAGNOSTIC RESULTS command. When used in the absence of a \fI\-\-list\fR
argument then a list of diagnostic page names and their numbers, known
by this utility, are listed.
.TP
\fB\-m\fR, \fB\-\-maxlen\fR=\fILEN\fR
where \fILEN\fR is the value placed in the parameter list length field of a
SEND DIAGNOSTIC command or in the allocation length field of a RECEIVE
DIAGNOSTIC RESULTS command. This only occurs when the other options imply
there will be data sent or received by the command. The default value
is 4096 bytes. \fILEN\fR cannot exceed 65535 or 0xffff in hexadecimal.
.TP
\fB\-O\fR, \fB\-\-old\fR
Switch to older style options. Please use as first option.
.TP
\fB\-P\fR, \fB\-\-page\fR=\fIPG\fR
where \fIPG\fR is the RECEIVE DIAGNOSTIC RESULTS command page code field.
If this option is given the PCV bit in that command is set. When this option
is given then no SEND DIAGNOSTIC command is sent (unlike \fI\-\-list\fR).
If \fIPG\fR is 0 then the response is decoded as if it is the SPC Supported
Diagnostic pages diagnostic page. Other \fIPG\fR values (i.e. 1 to 255)
have their responses output in hex.
.TP
\fB\-p\fR, \fB\-\-pf\fR
set Page Format (PF) bit. By default it is clear (i.e. 0) unless the
list \fI\-\-list\fR option is given in which case the Page Format
bit is set (as required by SPC\-3).
.TP
\fB\-r\fR, \fB\-\-raw\fR=\fIH,H...\fR
string of comma separated hex numbers each of which should resolve to
a byte value (i.e. 0 to ff inclusive). A (single) space separated string
of hex bytes is also allowed but the list needs to be in quotes. This
sequence forms a diagnostic page to be sent with the SCSI SEND DIAGNOSTIC
command. Mostly likely the \fI\-\-pf\fR option should also be given.
.TP
\fB\-r\fR, \fB\-\-raw=\-\fR
reads sequence of bytes from stdin. The sequence may be comma, space, tab
or linefeed (newline) separated. If a line contains "#" then the remaining
characters on that line are ignored. Otherwise each non separator character
should resolve to a byte value (i.e. 0 to ff inclusive). This sequence forms
a diagnostic page to be sent with the SCSI SEND DIAGNOSTIC command. Mostly
likely the \fI\-\-pf\fR option should also be given.
.TP
\fB\-s\fR, \fB\-\-selftest\fR=\fIST\fR
where \fIST\fR is the self\-test code. The default value is 0 which is
inactive. Some other values:
  \fB1\fR : background short self\-test
  \fB2\fR : background extended self\-test
  \fB4\fR : aborts a (background) self\-test that is in progress
  \fB5\fR : foreground short self\-test
  \fB6\fR : foreground extended self\-test
.PP
This option is mutually exclusive with default self\-test (i.e.
can't have (\fIST\fR > 0) and \fI\-\-test\fR).
.TP
\fB\-t\fR, \fB\-\-test\fR
sets the _default_ Self Test (SelfTest) bit. By default this is clear (0).
The \fI\-\-selftest=ST\fR option should not be active together with this
option. Both the \fI\-\-doff\fR and/or \fI\-\-uoff\fR options can be used
with this option.
.TP
\fB\-T\fR, \fB\-\-timeout\fR=\fISECS\fR
where \fISECS\fR is a timeout value (in seconds) for foreground self\-test
operations. The default value is 7200 seconds (2 hours) and any values
of \fISECS\fR less than the default are ignored.
.TP
\fB\-u\fR, \fB\-\-uoff\fR
set the Unit Offline (UnitOffL) bit (default is clear). Only significant
when \fI\-\-test\fR option is set for the default self\-test. When set other
operations on this logical unit may be affected (delayed) while a default
self\-test is underway. Some devices (e.g. Fujitsu disks) do more tests
when this bit is set.
.TP
\fB\-v\fR, \fB\-\-verbose\fR
increase level of verbosity. Can be used multiple times.
.TP
\fB\-V\fR, \fB\-\-version\fR
print out version string then exit.
.SH NOTES
All devices should support the default self\-test. The 'short' self\-test
codes should complete in 2 minutes or less. The 'extended' self\-test
codes' maximum duration is vendor specific (e.g. a little over 10 minutes
with the author's disks). The foreground self\-test codes wait until they
are completed while the background self\-test codes return immediately. The
results of both foreground and background self\-test codes are placed in
the 'self\-test results' log page (see sg_logs(8)). The SCSI command timeout
for this utility is set to 60 minutes to allow for slow foreground extended
self\-tests.
.PP
If the \fIDEVICE\fR is a disk then no file systems residing on that disk
should be mounted during a foreground self\-test. The reason is that other
SCSI commands may become queued behind the foreground self\-test and timeout.
.PP
When the \fI\-\-raw=H,H...\fR option is given then self\-tests should not
be selected. However the \fB\-\-pf\fR (i.e. "page format") option should be
given. The length of the diagnostic page to be sent is derived from the
number of bytes given to the \fI\-\-raw=H,H...\fR option. The diagnostic
page code (number) should be the first byte of the sequence (i.e. as
dictated by SPC\-3 diagnostic page format). See the EXAMPLES section below.
.PP
Arbitrary diagnostic pages can be read (in hex) with the sg_ses(8)
utility (not only those defined in SES\-2).
.PP
If the utility is used with no options (e.g. "sg_senddiag /dev/sg1")
Then a degenerate SCSI SEND DIAGNOSTIC command is sent with zero
in all its fields apart from the opcode. Some devices report this
as an error while others ignore it. It is not entirely clear from
SPC\-3 if it is invalid to send such a command.
.PP
In the 2.4 series of Linux kernels the \fIDEVICE\fR must be a SCSI
generic (sg) device. In the 2.6 series block devices (e.g. SCSI disks and
DVD drives) can also be specified.
.PP
To access SCSI enclosures see the sg_ses(8) utility. sg_ses uses the
SCSI SEND DIAGNOSTIC and RECEIVE DIAGNOSTIC RESULTS commands as outlined
in the SES\-2 (draft) standard.
.SH EXIT STATUS
The exit status of sg_senddiag is 0 when it is successful. Otherwise see
the sg3_utils(8) man page.
.SH OLDER COMMAND LINE OPTIONS
The options in this section were the only ones available prior to sg3_utils
version 1.23 . Since then this utility defaults to the newer command line
options which can be overridden by using \fI\-\-old\fR (or \fI\-O\fR) as the
first option. See the ENVIRONMENT VARIABLES section for another way to
force the use of these older command line options.
.TP
\fB\-doff\fR
set the Device Offline (DevOffL) bit (default is clear). Only significant
when \fI\-t\fR option is set for the default self\-test. Equivalent to
\fI\-\-doff\fR in the main description.
.TP
\fB\-e\fR
outputs the expected extended self\-test duration. Equivalent to
\fI\-\-extdur\fR in the main description.
.TP
\fB\-h\fR
outputs response from RECEIVE DIAGNOSTIC RESULTS in hex rather than decode
it.
.TP
\fB\-H\fR
outputs response from RECEIVE DIAGNOSTIC RESULTS in hex rather than decode it.
.TP
\fB\-l\fR
when a \fIDEVICE\fR is also given lists the names of all diagnostic
pages supported by this device. The request is sent via a SEND DIAGNOSTIC
command (with the "pf" bit set) and the response is fetched by a RECEIVE
DIAGNOSTIC RESULTS command. When used in the absence of a \fIDEVICE\fR
argument then a list of diagnostic page names and their numbers, known
by this utility, are listed.
.TP
\fB-N\fR, \fB\-\-new\fR
Switch to the newer style options.
.TP
\fB\-pf\fR
set Page Format (PF) bit. By default it is clear (i.e. 0) unless
the \fI\-l\fR option is given in which case the Page Format bit is set
(as required by SPC\-3).
.TP
\fB\-raw\fR=\fIH,H...\fR
string of comma separated hex numbers each of which should resolve to
a byte value (i.e. 0 to ff inclusive). This sequence forms a diagnostic
page to be sent with the SCSI SEND DIAGNOSTIC command. Mostly likely
the \fI\-pf\fR option should also be given.
.TP
\fB\-raw=-\fR
reads sequence of bytes from stdin. The sequence may be comma, space, tab
or linefeed (newline) separated. If a line contains "#" then the remaining
characters on that line are ignored. Otherwise each non separator character
should resolve to a byte value (i.e. 0 to ff inclusive). This sequence forms
a diagnostic page to be sent with the SCSI SEND DIAGNOSTIC command. Mostly
likely the \fI\-pf\fR option should also be given.
.TP
\fB\-s\fR=\fIST\fR
where \fIST\fR is the self\-test code. The default value is 0 which is
inactive. A value of 1 selects a background short self\-test; 2 selects
a background extended self\-test; 5 selects a foreground short self\-test;
6 selects a foreground extended test. A value of 4 will abort
a (background) self\-test that is in progress. This option is mutually
exclusive with default self\-test (i.e. \fI\-t\fR).
.TP
\fB\-t\fR
sets the _default_ Self Test (SelfTest) bit. By default this is clear (0).
The \fI\-s=ST\fR option should not be active together with this option.
Both the \fI\-doff\fR and/or \fI\-uoff\fR options can be used with this
option.
.TP
\fB\-T\fR=\fISECS\fR
where \fISECS\fR is a timeout value (in seconds) for foreground self\-test
operations. See the \fI\-\-timeout=SECS\fR option above.
.TP
\fB\-uoff\fR
set the Unit Offline (UnitOffL) bit (default is clear). Equivalent to
\fI\-\-uoff\fR in the main description.
.TP
\fB\-v\fR
increase level of verbosity. Can be used multiple times.
.TP
\fB\-V\fR
print out version string then exit.
.TP
\fB\-?\fR
output usage message. Ignore all other parameters.
.SH EXAMPLES
The examples sub\-directory in the sg3_utils packages contains two example
scripts that turn on the CJTPAT (jitter pattern) on some SAS disks (one
script for each phy). One possible invocation for phy 1 is:
.PP
  sg_senddiag \-\-pf \-\-raw=\- /dev/sg2 < sdiag_sas_p1_cjtpat.txt
.PP
There is also an example script that turns on the IDLE pattern. Once a
test pattern has been started it can be turned off by resetting the phy
or with the STOP phy pattern function:
.PP
  sg_senddiag \-\-pf \-\-raw=\- /dev/sg2 < sdiag_sas_p1_stop.txt
.SH ENVIRONMENT VARIABLES
Since sg3_utils version 1.23 the environment variable SG3_UTILS_OLD_OPTS
can be given. When it is present this utility will expect the older command
line options. So the presence of this environment variable is equivalent to
using \fI\-\-old\fR (or \fI\-O\fR) as the first command line option.
.SH AUTHOR
Written by Douglas Gilbert
.SH "REPORTING BUGS"
Report bugs to <dgilbert at interlog dot com>.
.SH COPYRIGHT
Copyright \(co 2003\-2018 Douglas Gilbert
.br
This software is distributed under the GPL version 2. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
.SH "SEE ALSO"
.B sg_ses(8), sg_logs(8), smartmontools(see net)
